Ausgangspunkt

Kritik an Medien: Verzerrte Berichterstattung und dadurch Einflussnahme auf gesellschaftliche / politische Ergebnisse

Aber: Was bedeutet unverzerrt in diesem Zusammenhang? Kann es objektive Berichterstattung geben?

Welche Anreize beeinflussen die Auswahl der Verleger, bzw. die Faktendarstellung der Journalisten?

Aus der ökonomischen Literatur:

Angebotsseitig:

Nachfrageseitig:

Frage

Annahmen

Vorgehensweise

1. \(WTP_{d}\) - Gewichtete Themenwahrscheinlichkeit pro Dokument berechnen

  1. Sentiment analyse - Wie ist die Tonalität eines Dokuments?

\[SC_d\]

  1. Structural topic model (STM) - Welche Themen werden in den Artikeln mit welcher Wahrscheinlichkeit besprochen?

\[\theta_d = [\theta^1_{d},...,\theta^{k}_{d}]'\]

  1. Weighted topic distribution (WTP) - Gewichtete Themenwahrscheinlichkeit pro Dokument

\[ WTP_{d} = [\theta^1_{d}*SC_d,...,\theta^{k}_{d}*SC_d]\]

2. Gewichtete Themenwahrscheinlichkeit pro Medium \(m\) pro Thema \(k\)

  • Für jedes Medium werden alle Dokumente aggregiert und so für jedes Thema die durchschnittliche gewichtete Themenwahrscheinlichkeit berechnet.

3. Parteispezifische Themen definieren

  • Aus dem STM erhalten wir pro Thema eine Wahrscheinlichkeitsverteilung über alle Wörter.
  • Die wahrscheinlichsten Wörter jedes Themas werden verwendet, um zu überprüfen ob das Thema \(k\) einer Partei \(p\) zugeordnet werden kann.
  • Ein Thema kann verschiedenen Parteien zugeordnet werden.

4. Gewichte Themenwahrscheinlichkeit pro Medium \(m\) pro Partei \(p\)

  • Aggregiert über alle parteispezifischen Themen pro Medium ergibt den Media Bias Wert eines Mediums für eine Partei.

Daten

online Nachrichten (n=16.473)

Pressemitteilungen (n=2284)

  • Pressemitteilungen auf den öffentlich zugänglichen Webseiten der Parteien und Fraktionen

  • Rechtliche Trennung zwischen den Pressemitteilungen von Parteien und deren Bundestagsfraktionen: Laut Parteigesetzt §25 (2) dürfen Fraktionen ihre Parteien nicht im Wahlkampf unterstützen

  • Dennoch nehme ich an, dass auch die Pressemitteilungen der Fraktionen einen Einfluss auf die öffentliche Wahrnehmung haben (Kepplinger and Maurer, 2004).

1. Gewichtete Themenwahrscheinlichkeit

a. Sentiment analyse

To measure the tone (or sentiment) of an article a dictionary-based method is applied. To conduct such an analysis, a list of words (dictionary) associated with a given emotion, such as negativity is pre-defined. The document is then deconstructed into individual words and each word is assigned a sentiment value according to the dictionary, where the sum of all values results in the emotional score for the given document.

\(SC_d\) is defined as the number of all positive words minus negative words divided by the total number of words of each document \(d\)

\[SC_d=\frac{\text{summe pos. wörter}_d - \text{summe neg. wörter}_d}{\text{summe wörter}}\]

A sample document

source title_text SC
1 DIE LINKE Bundesregierung auf Trump-Kurs „Bei der Frage, ob ein Haushalt unterstützt wird, sind für DIE LINKE zwei Fragen von entscheidender Bedeutung. Erstens: Schaffen wir mit dem Haushalt mehr Gerechtigkeit? Zweitens: Trägt er dazu bei, dass diese Welt friedlicher wird. Beim jetzt vorgelegten Haushaltsentwurf trifft beides nicht zu: An den bestehenden Ungerechtigkeiten, etwa im Steuersystem, ändert sich nichts, und die Ausgaben für Waffen und Kriegseinsätze steigen weiter, gerade so, wie es US-Präsiden … 6.02
model_df2 %>% 
  group_by(source, type) %>% 
  summarise(meanSent_dummy = mean(sent_dummy, na.rm = T)) %>%
  ggplot(aes(source, meanSent_dummy)) +
  geom_segment( aes(x=source ,xend=source, y=0, yend=meanSent_dummy), color="grey") +
  geom_point(size=3, color=color) +
  coord_flip() +
  ggthemes::theme_hc() +
  labs(x=NULL, y=NULL, title="Average Sentiment value") +
  facet_wrap(~type, scales = "free_y") +
  theme(
    panel.grid.minor.y = element_blank(),
      panel.grid.major.y = element_blank()
  )

b. Strucutral Topic Model

To discover the latent topics in the corpus of press releases and news articles, a structural topic modeling (STM) developed by Roberts (2016) is applied. The STM is an unsupervised machine learning approach that models topics as multinomial distributions of words and documents as multinomial distributions of topics, allowing to incorporate external variables that effect both, topical content and topical prevalence.

Der generative Prozess des STM generiert zwei posterior Wahrscheinlichkeiten:

  1. Word-topic Posterior: \(\Phi_c\) ist eine \(K\) x \(V\) Matrix (mit \(K=\) Anzahl der Themen und \(V=\) Vokabular), wobei der Eintrag \(\phi_{k,v}\) als Wahrscheinlichkeit interpretiert werden kann, dass Term \(v\) in Thema \(k\) vorkommt

  2. Document-topic Posterior: \(\Theta\) ist eine \(D\) x \(K\) Matrix (mit \(D=\) Anzahl der Dokumente und \(K=\) Anzahl der Themen), wobei der Eintrag \(\theta_{d,k}\) als Wahrscheinlichkeit interpretiert werden kann, dass das Dokument \(d\) das Thema \(k\) beinhaltet.

Model-Annahmen:

  • Themen Verteilung hängt von der Quelle ab (Bild.de, FOCUS ONLINE, FDP, …)
  • Anzahl Themen 70

c. Weighted topic probability

In order to measure topic-specific tone, the sentiment values are combined with the results of the STM procedure.

\[\text{WTP}^k_d=\theta^{k}_{d}*\text{SC}_d\]

3. Parteispezifische Themen

Using the most probable words in each topic to check if the topic is about the party or its representatives.

The following topics are filtered, because they are not directly related to one party or its representatives:

sent_df %>%
  filter(ident_sum == 0) %>%
  distinct(topic_label) %>%
  htmlTable::htmlTable(align="l")
topic_label
1 Topic 1: the, a, s, of, u, to, i
2 Topic 4: politiker, zeitung, schreibt, facebook, schrieb, brief, post
3 Topic 5: stimmen, wählen, wahlkreis, bundestagswahl, kandidaten, veränderung, wähler
4 Topic 6: trump, us, präsident, usa, donald, g, gipfel
5 Topic 10: baden, württemberg, nachrichten, bahn, tag, bayern, start
6 Topic 11: ge, ten, be, ver, te, li, gen
7 Topic 12: prozess, nsu, zschäpe, anklage, bundesanwaltschaft, uwe, münchen
8 Topic 13: deutschen, osten, berlin, ost, ddr, ostdeutschland, christian
9 Topic 15: kohl, helmut, kohls, kanzler, einheit, tod, deutschen
10 Topic 19: täter, hamburg, verletzt, messer, bürgermeister, menschen, hamburger
11 Topic 20: euro, milliarden, millionen, jahr, geld, kosten, bund
12 Topic 21: zdf, sendung, öffentlich, talk, sender, anne, bosbach
13 Topic 23: leute, leben, lange, tag, jahren, wissen, frage
14 Topic 24: g, hamburg, gipfel, hamburger, polizei, juli, juni
15 Topic 25: gericht, urteil, richter, verfahren, verurteilt, klage, entscheidung
16 Topic 27: antisemitismus, juden, israel, deutschland, berlin, holocaust, israelische
17 Topic 28: berliner, berlin, amri, müller, opfer, anschlag, tegel
18 Topic 30: bundestag, abgeordneten, fraktion, abgeordnete, parlament, sitzung, fraktionen
19 Topic 31: türkei, erdogan, türkischen, deutschland, türkische, deutsche, deutschen
20 Topic 32: muslime, islam, deutschland, kirche, moschee, muslimischen, ditib
21 Topic 34: polizei, demonstranten, stadt, menschen, demonstration, gruppen, straße
22 Topic 38: afghanistan, abschiebungen, abschiebung, asylbewerber, abgeschoben, kabul, deutschland
23 Topic 41: kinder, studie, deutschland, eltern, schulen, schule, schüler
24 Topic 42: diesel, deutschland, autos, bundesregierung, deutschen, fahrverbote, autoindustrie
25 Topic 43: wahlkampf, tv, wahl, duell, thema, bundestagswahl, september
26 Topic 44: frauen, männer, jahre, alter, gewalt, jahren, kinder
27 Topic 47: berlin, deutschland, politik, videos, reuters, stichwort, air
28 Topic 48: zahl, jahr, deutschland, bamf, flüchtlinge, zahlen, bundesamt
29 Topic 49: is, deutschland, syrien, gefährder, islamisten, anschlag, staat
30 Topic 54: eu, europa, deutschland, europäischen, europäische, staaten, macron
31 Topic 59: russland, sanktionen, un, usa, putin, deutschland, russischen
32 Topic 60: unternehmen, arbeit, wirtschaft, beschäftigten, deutschen, prozent, menschen
33 Topic 61: polizei, sprecher, angaben, polizisten, ermittlungen, beamten, ermittelt
34 Topic 64: bundestag, gesetz, abstimmung, entscheidung, antrag, bundesverfassungsgericht, grundgesetz
35 Topic 65: bundesregierung, türkei, nato, deutschland, syrien, türkischen, kurden
36 Topic 66: menschen, flüchtlinge, deutschland, flüchtlingen, migranten, integration, land
37 Topic 67: welt, politik, land, partei, politischen, politische, deutschland
38 Topic 68: verfassungsschutz, bka, sicherheit, behörden, daten, straftaten, sicherheitsbehörden

Furthermore the following topics are kept out of the analysis because they cannot be clearly assigned to one party:

sent_df %>%
  filter(topic %in% filter_topics) %>%
  distinct(topic_label) %>%
  htmlTable::htmlTable(align = "l")
topic_label
1 Topic 14: august, cdu, spd, prozent, bundestagswahl, wahl, parteien
2 Topic 18: prozent, umfrage, spd, union, cdu, grünen, mehrheit
3 Topic 40: bundestagswahl, wahl, prozent, ergebnis, partei, bundestag, cdu

In order to get a better understanding about how different media report on the parties, I check how each medium report about the topics that are related to one party. The press releases of each party is added as a reference point.

plotTopics <- function(x){
  sent_df %>%
    filter(party==x) %>%
    filter(ident != 0) %>%
    filter(!topic %in% filter_topics) %>%
    filter(source %in% c(news,x)) %>%
    mutate(spoton = ifelse(source == x, 1, 0)) %>%
    ggplot(aes(reorder(source, dummy_theta), dummy_theta,fill=spoton)) +
    geom_col(show.legend = F, position = "dodge") +
    coord_flip() +
    labs(x=NULL, y="Weighted topic probability") +
    facet_wrap(~topic_label, ncol = 2, scales = "free_x") +
    theme_tufte() +
    theme(strip.text.x = element_text(size = 15),
          axis.text.y = element_text(size = 10),
          axis.text.x = element_blank(),
          axis.ticks =  element_blank())
}
CDU
x <- "CDU"
plotTopics(x)

SPD
x <- "SPD"
plotTopics(x)

B90/Die Grünen
x <- "B90/GRÜNE"
plotTopics(x)

AfD
x <- "AfD"
plotTopics(x)

FDP
x <- "FDP"
plotTopics(x)

DIE LINKEN
x <- "DIE LINKE"
plotTopics(x)

4. Aggregated Weighted Topic Probability

ggiraphExtra::ggRadar(radar, aes(color = source),
                      interactive = T,
                      rescale = F,
                      alpha = 0) 

Rescaled

ggiraphExtra::ggRadar(radar, aes(color = source),
                      rescale = T,
                      alpha = 0) +
  theme_hc() +
  labs(title="Weighted topic probability") +
  scale_color_viridis_d() +
  theme(legend.position = "none"
        #,legend.title = element_blank()
        ) +
   guides(col = guide_legend(ncol = 1)) +
    facet_wrap(~source, nrow = 2)